package es.antonio.duarte.abrahamAdmin.servicios;

import java.util.Collection;
import java.util.Date;

import es.antonio.duarte.abrahamAdmin.dao.FraseDAO;
import es.antonio.duarte.abrahamAdmin.model.Frase;

/**
 * Desarrollo del servicio de frases.
 * @author Antonio Duarte
 */
@SuppressWarnings("unchecked")
public class FraseServicioImpl implements FraseServicio {
   /**
    * Texto con el que rellenar las excepciones.
    */
   private String mensaje = "Debe introducir una parámetro en este método";
   /**
    * El dao asociado a la clase frase con el que iremos a la base de datos.
    */
   private FraseDAO fraseDAO;
   /**
    * Recuperamos el dao  asociado a Frase.
    * @return FraseDAO El dao de frase.
    */
   public FraseDAO getFraseDAO() {
      return fraseDAO;
   }
   /**
    * Spring usará este método para inyectar el dao de frase.
    * @param fraseDAO El dao de frase.
    */
   public void setFraseDAO(final FraseDAO fraseDAO) {
      this.fraseDAO = fraseDAO;
   }

   /**
    * Consulta de frases por el texto de una frase.
    * @param frase Texto de una frase por el cual se buscaran frases
    * @return Lista de frases que cumplen con el texto de una frase (vacia si no hay
    *         registros)
    */
   public Collection consultarPorFrase(final String frase) {
      if (frase == null) {
         throw new IllegalArgumentException(mensaje);
      }

      Collection resultado = fraseDAO.consultarPorFrase(frase);
      return resultado;
   }
   /**
    * Consulta de frases por el autor de una frase.
    * @param autor Autor de una frase por el cual se buscaran frases
    * @return Lista de frases que cumplen con el autor de una frase (vacia si no hay
    *         registros)
    */
   public Collection consultarPorAutor(final String autor) {
	   if (autor == null) {
		   throw new IllegalArgumentException(mensaje);
	   }
	   
	   Collection resultado = fraseDAO.consultarPorAutor(autor);
	   return resultado;
   }
   /**
    * Consulta de frases por el tema de una frase.
    * @param tema Tema de una frase por el cual se buscaran frases
    * @return Lista de frases que cumplen con el tema de una frase (vacia si no hay
    *         registros)
    */
   public Collection consultarPorTema(final String tema) {
	   if (tema == null) {
		   throw new IllegalArgumentException(mensaje);
	   }
	   
	   Collection resultado = fraseDAO.consultarPorTema(tema);
	   return resultado;
   }

   /**
    * Inserta la entidad proporcionada.
    * @param entidad Entidad que se desea insertar a la BBDD
    */
   public void insertar(Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }
      fraseDAO.insertar(entidad);
   }

   /**
    * Actualiza la entidad proporcionada.
    * @param entidad Entidad que se desea actualizar en la BBDD
    */
   public void actualizar(Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }
      fraseDAO.actualizar(entidad);
   }

   /**
    * Elimina la entidad proporcionada.
    * @param entidad Entidad que se desea eliminar de la BBDD
    */
   public void eliminar(Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }
      fraseDAO.eliminar(entidad);
   }

   /**
    * Consulta de todos las frases. Podra recibir un objeto o ser invocado sin
    * parametros.
    * @return Lista de frases(vacia si no hay registros)
    * @param objeto Objeto con el que se realizara la consulta. Si no es
    *        necesario, no se pasa.
    */
   public Collection consultar(Object... objeto) {
      return fraseDAO.consultar(Frase.class);
   }

   /**
    * Consulta las frases que concuerden con el id proporcionado.
    * @return Objeto Frase asociado al id proporcionado
    * @param id  Objeto con el que se realizara la consulta
    */
   public Object consultarPorId(final Long id) {
      if (id == null) {
         throw new IllegalArgumentException(mensaje);
        }
      return fraseDAO.consultarPorId(id, Frase.class);

   }
}
